import MD5 from "../md5/index.js";
/* eslint-disable camelcase */
function EVP_BytesToKey(password, salt, keyBits, ivLen) {
    if (!Buffer.isBuffer(password))
        password = Buffer.from(password, 'binary');
    if (salt) {
        if (!Buffer.isBuffer(salt))
            salt = Buffer.from(salt, 'binary');
        if (salt.length !== 8)
            throw new RangeError('salt should be Buffer with 8 byte length');
    }
    var keyLen = keyBits / 8;
    var key = Buffer.alloc(keyLen);
    var iv = Buffer.alloc(ivLen || 0);
    var tmp = Buffer.alloc(0);
    while (keyLen > 0 || ivLen > 0) {
        var hash = new MD5();
        hash.update(tmp);
        hash.update(password);
        if (salt)
            hash.update(salt);
        tmp = hash.digest();
        var used = 0;
        if (keyLen > 0) {
            var keyStart = key.length - keyLen;
            used = Math.min(keyLen, tmp.length);
            tmp.copy(key, keyStart, 0, used);
            keyLen -= used;
        }
        if (used < tmp.length && ivLen > 0) {
            var ivStart = iv.length - ivLen;
            var length = Math.min(ivLen, tmp.length - used);
            tmp.copy(iv, ivStart, used, used + length);
            ivLen -= length;
        }
    }
    tmp.fill(0);
    return { key: key, iv: iv };
}
export default EVP_BytesToKey;
